home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48hor1 / reversi.src < prev    next >
Text File  |  1991-02-21  |  6KB  |  205 lines

  1. %%HP: T(3)A(R)F(.);
  2. @ Reversi (Othello), program by Paul Dale
  3. @ Game invented by Martin Gardner
  4. DIR
  5.   PLAY
  6.     \<< SETUP "You first?" 4 DISS
  7.       WHILE GETK DUP 13 <
  8.       REPEAT DROP
  9.       END
  10.       IF 13 ==
  11.       THEN SWAPC
  12.       END
  13.       WHILE 1 FC?C
  14.       REPEAT BD 5 R\->S GETN SWAP DROP 1 == 'PMOV' 'CMOV' IFTE SCOR
  15.         IF 8 FS?C
  16.         THEN
  17.           IF 2 FS?
  18.           THEN 1 SF
  19.           ELSE 2 SF
  20.           END
  21.         ELSE 2 CF
  22.           IF CCT PCT + 64 ==
  23.           THEN 1 SF
  24.           END
  25.         END
  26.       END
  27.       IF 3 FC?
  28.       THEN PCT CCT -
  29.         IF DUP 0 <
  30.         THEN "I win"
  31.         ELSE
  32.           IF DUP 0 >
  33.           THEN "You win"
  34.           ELSE "Draw"
  35.           END
  36.         END 1 DISS ABS "by " SWAP \->STR + " disks" + 4 DISS
  37.       END CLEAN
  38.     \>>
  39.   CLEAN
  40.     \<< { PCT CCT BD OLDP } PURGE STOF 7 FREEZE
  41.     \>>
  42.   SETUP
  43.     \<< RCLF 1 9
  44.       FOR j j CF
  45.       NEXT 2 DUP 'PCT' STO 'CCT' STO INITP NEWOB 'BD' STO { } 'OLDP' STO PICT
  46.         PURGE { # 0h # 0h } PVIEW 1 8
  47.       FOR j PICT # 60h j 6 * R\->B 2 \->LIST j 1 \->GROB GOR
  48.       NEXT PICT { # 64h # 0h } "12345678" 1 \->GROB GOR 4 4 1 DRWP 4 5 -1 DRWP
  49.         5 4 -1 DRWP 5 5 1 DRWP
  50.     \>>
  51.   SCOR
  52.     \<< "  My total " CCT \->STR + 2 DISS "Your total " PCT \->STR + 3 DISS
  53.     \>>
  54.   INITP @ Code in ASC format
  55. "C2A205E00066000F0000088888888880000000080000000080000000080001F0
  56. 008000F1000800000000800000000800000000888888888851C145B571A172E2
  57. 24946595819103739304758512221363A3F3E4F4023282D23484D40561B1E152
  58. B42555A592C24474A2B22353B3E35464F142C41500FA22"
  59.   SWAPC
  60.     \<< 5 R\->S BD OVER GETN NEG ROT SWAP PUTN DROP
  61.     \>>
  62.   FLIPS
  63.     \<< \-> x y
  64.       \<< PICT x 4 * # 60h + y 6 * R\->B 2 \->LIST GROB 4 6 707020500000 GXOR
  65.       \>>
  66.     \>>
  67.   DRWP
  68.     \<< \-> x y c
  69.       \<< PICT x 4 * # 60h + y 6 * R\->B 2 \->LIST c 1 ==
  70.         GROB 4 6 705050700000 GROB 4 6 002070200000 IFTE REPL
  71.       \>>
  72.     \>>
  73.   MKMOV
  74.     \<< BD 5 R\->S GETN \-> x y j c
  75.       \<< BD x y XY\->S c PUTN x y c DRWP 1
  76.         IF c -1 ==
  77.         THEN 'CCT'
  78.         ELSE 'PCT'
  79.         END STO+ -1 1
  80.         FOR a -1 1
  81.           FOR b 1 'j' STO
  82.             WHILE x a j * + y b j * + XY\->S GETN c NEG ==
  83.             REPEAT 1 j + 'j' STO
  84.             END
  85.             IF x a j * + y b j * + XY\->S GETN c ==
  86.             THEN
  87.               DO j 1 - 'j' STO
  88.                 IF x a j * + y b j * + XY\->S SWAP OVER GETN c NEG ==
  89.                 THEN SWAP c PUTN x a j * + y b j * + FLIPS 'PCT' 'CCT'
  90.                   IF c -1 ==
  91.                   THEN SWAP
  92.                   END -1 STO+ 1 STO+
  93.                 ELSE SWAP DROP 7 SF
  94.                 END
  95.               UNTIL 7 FS?C
  96.               END
  97.             END
  98.           NEXT
  99.         NEXT DROP
  100.       \>> SWAPC
  101.     \>>
  102.   PUTN @ Code in ASC format
  103. "CCD2065000147108174E78F1466013706135147C2135179110349C2A28A29030
  104. F660030115D007135142164808C6DE5"
  105.   GETN @ Code in ASC format
  106. "CCD2056000137061358F14660147C2135179D015B030F902D2D6C4C4C2C4C4CA
  107. 344B2A2CA07135141CF142164808CD0808212D69DF1A9E"
  108.   CMOV
  109.     \<< "Thinking..." 4 DISS BD NEWOB DUP NEWOB MVGEN S\->XY
  110.       IF DUP 0 <
  111.       THEN DROP2 "I pass" 1 DISS SWAPC 8 SF
  112.       ELSE DUP2 R\->C \->STR "My move " SWAP + 1 DISS MKMOV
  113.       END
  114.     \>>
  115.   DISS
  116.     \<< PICT SWAP # Ah * # 10h + # 0h SWAP 2 \->LIST ROT # 60h # Ah BLANK
  117.       { # 0h # 0h } ROT 2 \->GROB GOR REPL
  118.     \>>
  119.   PMOV
  120.     \<< 0 DUP \-> c1 c2
  121.       \<< "Your move" 4 DISS
  122.         WHILE 4 FC?C
  123.         REPEAT GETK 'c1' STO
  124.           IF c1
  125.           THEN
  126.             IF c1 8 >
  127.             THEN 5 SF { OFF
  128.               \<<
  129.                 IF BD 0 R\->S CKMOV
  130.                 THEN 4 SF 8 SF
  131.                 SWAPC
  132.                 ELSE 5 CF
  133.                 END
  134.               \>>
  135.               \<< 1 3 4 6 SF SF SF SF
  136.               \>>
  137.               \<<
  138.                 OLDP SIZE 4 ==
  139.                 \<< OLDP LIST\-> DROP PICT { # 0h # 0h } ROT REPL 'BD' STO
  140.                   'PCT' STO 'CCT' STO { } 'OLDP' STO
  141.                 \>>
  142.                 \<< 5 CF
  143.                 \>> IFTE
  144.               \>>
  145.               \<< 5 CF
  146.               \>>
  147.               \<< 5 CF
  148.               \>> } c1 8 - GET EVAL
  149.             ELSE c1 \->STR 1 DISS GETK 'c2' STO c1 \->STR c2 \->STR + 1 DISS
  150.               IF BD c1 c2 XY\->S CKMOV
  151.               THEN 4 SF CCT PCT BD NEWOB PICT RCL 4 \->LIST 'OLDP' STO
  152.                 c1 c2 MKMOV
  153.               END
  154.             END
  155.           END
  156.           IF 4 FC? 5 FC?C AND
  157.           THEN "Illegal" 1 DISS ERRBELL
  158.           END
  159.         END
  160.       \>>
  161.     \>>
  162.   S\->XY
  163.     \<< S\->R 11 - DUP 9 MOD SWAP 9 / IP
  164.     \>>
  165.   XY\->S
  166.     \<< 9 * + 11 + R\->S
  167.     \>>
  168.   GETK
  169.     \<< TICKS \-> sttme
  170.       \<<
  171.         DO
  172.           IF TICKS sttme - B\->R 491520 >
  173.           THEN OFF TICKS 'sttme' STO
  174.           END
  175.         UNTIL KEY
  176.         END
  177.       \>> KMAP SWAP POS
  178.     \>>
  179.   KMAP { 82 83 84 72 73 74 62 63 33 34 35 43 52 32 }
  180.   R\->S
  181.     \<< # 18CEAh SYSEVAL
  182.     \>>
  183.   S\->R
  184.     \<< # 18DBFh SYSEVAL
  185.     \>>
  186.   CKMOV @ Code in ASC format
  187. "CCD20451008F146608FB9760D20B0614713517EC213416915F0B0690A508528A
  188. C0316A169D23184D715E090EB07150871D2160CF8AF6E651015E090E61713086
  189. 1D0349C2A26A00344B2A2DA8F2D760141070A142164808CD2CE7040D23087730
  190. D23097E20D230A7520D2E67D10348FFFF7210347FFFF7700346FFFFD5132130C
  191. 013115F0862B0E690AB001CE90E00C013115F090A0080820890200133862F0E6
  192. 90AADCE6C00CE90ADCE6851013B92"
  193.   MVGEN @ Code in ASC format
  194. "CCD20A5200179E7E78FB97601C9D20B067090070A8F73560142164808CD51321
  195. 30C013115F0862B0E690AB001CE90E00C013115F090A0080820890200133862F
  196. 0E690AADCE6C00CE90ADCE6851F9C013115B09080015D01336AEF13713513417
  197. 414213016913610B14313117913710A74408AAB27E21AF41011321007B208AA9
  198. 175111119F8DE6EDFD21080111011BFACA1000111A13411B1351567D72580820
  199. F902508522687B2125B8A2034660002D155716F17F152715170D880DE11BCBE7
  200. E7134D014A968B611BCA130156090EBD841D2CE7F8ED2308768ED23097D7ED23
  201. 0A747ED2E67C6E348FFFF716E347FFFF765E346FFFF7B4E861786900D2641030
  202. F8625030115C0DB1121311450111313117A179D23184D73104AF1D515B030F90
  203. 601E5170CF8AFAE01301906EECD69EF1614"
  204. END
  205.